/*
* 说明：用于项目字典值的使用
* ljy
* 20220225最后修改
* 提示：应该根据前端展示的需求，用好mapToDict和dictToMap两个函数。
* */
import Request from '@/api/request/request';
import urls from '@/api/request/urls';
import { DictItem } from '@/types/interface/sys_interface';

export interface Option { // 作为字典选项标准
  value: any, // 相当于键，即Key
  label: string // 相当于标签
}

// 性别选择
// export const userSexMap: Map<number, String> = new Map([[0, '未选择'], [1, '男'], [2, '女']]);

// export const userStatus: Map<number, String> = new Map([[0, '不可用'], [1, '可用'], [2, '锁定']]);

export const userSexDict: Array<Option> = [
  {
    value: 0,
    label: '保密',
  },
  {
    value: 1,
    label: '男',
  },
  {
    value: 2,
    label: '女',
  }];
export const userStatusDict: Array<Option> = [
  {
    value: 0,
    label: '禁用',
  },
  {
    value: 1,
    label: '可用',
  },
  {
    value: 2,
    label: '锁定',
  }];

export const yesOrNoDict: Array<Option> = [
  {
    value: true,
    label: '是',
  },
  {
    value: false,
    label: '否',
  }];
// 权限的菜单类型
export const permissionTypeDict: Array<Option> = [
  {
    value: 1,
    label: '菜单',
  },
  {
    value: 2,
    label: '按钮',
  }];
// 权限的打开方式
export const permissionLinkTypeDict: Array<Option> = [
  {
    value: 1,
    label: '组件',
  },
  {
    value: 2,
    label: '内链',
  },
  {
    value: 3,
    label: '外链',
  }];
// positionId职务
export const positionId: Array<Option> = [
  {
    value: 1,
    label: '行政管理人员',
  },
  {
    value: 2,
    label: '专任教师',
  },
  {
    value: 3,
    label: '系部主任',
  },
  {
    value: 4,
    label: '系部书记',
  },
  {
    value: 5,
    label: '系部副主任',
  },
  {
    value: 6,
    label: '系部副书记',
  },
  {
    value: 7,
    label: '辅导员',
  },
  {
    value: 8,
    label: '教秘',
  },
  {
    value: 9,
    label: '行秘',
  },
  {
    value: 10,
    label: '外聘教师',
  },
  {
    value: 11,
    label: '人事部',
  }];
// =======
// 教室类型 颜卓中添加
export const roomTypeDict: Array<Option> = [
  {
    value: 1,
    label: '机房',
  },
  {
    value: 2,
    label: '多媒体教室',
  },
  {
    value: 3,
    label: '普通教室',
  }];
// 部门管理所属部门 颜卓中添加
export const sysdepartmentTypeDict: Array<Option> = [
  {
    value: 1,
    label: '柳州城市职业学院',
  },
  {
    value: 2,
    label: '柳铁',
  },
  {
    value: 3,
    label: '柳州职业技术学院',
  },
];
// 教室管理所属部门 颜卓中添加
export const departmentTypeDict: Array<Option> = [
  {
    value: 1,
    label: '信息工程系',
  },
  {
    value: 2,
    label: '经济贸易系',
  },
  {
    value: 6,
    label: '文化旅游系',
  },
  {
    value: 7,
    label: '公共基础部',
  },
  {
    value: 8,
    label: '机电工程系',
  },
];
// >>>>>>> origin/master
export const mapToDict = <K>(map:Map<K, string>):Option[] => { // 用于从map转数组，方便用于不同的场合
  const array:Option[] = new Array(map.size);
  let index = 0;
  // es-lint不推荐下面的写法
  // for (let [key, value] of map) {
  //   array[index].value = key;
  //   array[index].label = value;
  //   index += 1;
  // }
  map.forEach((value, key) => {
    array[index].value = key;
    array[index].label = value;
    index += 1;
  });
  return array;
};

export const dictToMap = <K>(array:Option[]):Map<K, string> => { // 用于从数组转map，方便用于不同的场合
  const map:Map<K, string> = new Map();
  array.forEach((item:Option) => {
    map.set(item.value, item.label);
  });
  return map;
};

/**
 * 用于从服务端获取字典值
 * @param dictName 字典名称
 * @param dictValueType 字典值的类型，number表示数字，string表示字符串（默认），boolean表示布尔类型
 */
export const getDict = async (dictName:string, dictValueType?:string):Promise<Array<Option>> => {
  let array:Option[] = [];
  let index = 0;
  // 从服务端读取相应名称的字典
  const resData:any = await new Request(`${urls.API_URL_BACKSTAGE_DICTITEM_MANAGE}/all`, null,
    {
      params:
        {
          'sysDict.name': dictName,
        },
    }).get();
  if (resData.success) {
    const items = resData.data;
    // array = new Array(items.length);
    // 按照规则生成字典
    items.forEach((item:DictItem) => {
      let dictValue:string|number|boolean;
      if (dictValueType === 'number') {
        dictValue = Number(item.dictValue);
      } else if (dictValueType === 'boolean') {
        dictValue = Boolean(item.dictValue);
      } else {
        dictValue = item.dictValue!;
      }
      array[index] = {
        value: dictValue,
        label: item.dictKey!,
      };
      index += 1;
    });
  }
  return array;
};

/*
export default {
  sexOfUserMap
}
*/

// console.log(dictToMap(yesOrNoDict));
